perm filename MNCRE[CRE,BGB]1 blob sn#104790 filedate 1974-06-03 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	LANGUAGE COMPATIBILITY FLAG.
C00006 00003	LINK NAMES DEFINED.
C00008 00004	PROPERTY-TYPE MACROS.
C00010 ENDMK
C⊗;
;LANGUAGE COMPATIBILITY FLAG.
	IFNDEF SAIL,<	↓SAIL←←  0	;-1 FOR SAIL EMBEDDED VERSION.>

;ALTERNATE PDP-10 MNEMONICS.
	OPDEF DIP[HRLM]↔OPDEF DAP[HRRM]
	OPDEF CAR[HLRZ]↔OPDEF CDR[HRRZ]↔OPDEF DZM[SETZM]
	OPDEF LAC[MOVE]↔OPDEF DAC[MOVEM]↔OPDEF GO[JRST]
	OPDEF FLOAT[FSC 233]↔OPDEF FIXX[FIX 233000]
	OPDEF FLO[FSC 225]

;SAIL LIKE SUBROUTINE LINKAGE.
	↓P←←17
	DEFINE SUBR(NAME){INTERN NAME↔NAME: ;}
	DEFINE CALL(NAME,X1,X2,X3,X4){
	IFDIF <> <X1> {PUSH 17,X1↔IFDIF <> <X2> {PUSH 17,X2
	IFDIF <> <X3> {PUSH 17,X3↔IFDIF <> <X4> {PUSH 17,X4}}}}
	PUSHJ 17,NAME}
	DEFINE ARG1<-1(17)>↔DEFINE ARG2<-2(17)>
	DEFINE ARG3<-3(17)>↔DEFINE ARG4<-4(17)>
	DEFINE SETQ(VAR,LIST){CALL(LIST)↔DAC 1,VAR}

;RETURN FROM AN N-ARGUMENT SUBROUTINE CALL.
	DEFINE POP0J <POPJ 17,>
	↓POP1J.:SUB 17,[2(2)]↔GO@2(17)↔DEFINE POP1J<GO POP1J.>
	↓POP2J.:SUB 17,[3(3)]↔GO@3(17)↔DEFINE POP2J<GO POP2J.>
	↓POP3J.:SUB 17,[4(4)]↔GO@4(17)↔DEFINE POP3J<GO POP3J.>
	↓POP4J.:SUB 17,[5(5)]↔GO@5(17)↔DEFINE POP4J<GO POP4J.>

;ACCUMULATOR AND TEMPORARY DATA MANAGEMENT.
	DEFINE ACCUMULATORS(LIST){ACPTR←←2
	FOR AC⊂(LIST)<AC←ACPTR↔ACPTR←←ACPTR+1↔>}
	DEFINE DECLARE (LIST){
	FOR VARNAM⊂(LIST)<VARNAM: 0↔>}

;FATAL ERROR MESSAGE.
	DEFINE FATAL(STR){PUSHJ P,FATAL.↔JFCL[ASCIZ/STR/]}
	FATAL.:OUTSTR[BYTE(7)15,12,106,101,124↔"AL - "⊗1↔0]
	CDR(P)↔CDR@↔OUTSTR @↔INCHRW↔GO .-1↔LIT

	DEFINE WARNING(STR){PUSHJ 17,WARN.↔JFCL[ASCIZ/STR/]}
	WARN.:OUTSTR[BYTE(7)15,12,"W","A","R"↔"NING:"⊗1↔0]
	CDR(P)↔CDR@↔OUTSTR @↔INCHRW↔POPJ 17,↔LIT

	DEFINE CRLF{OUTSTR[BYTE(7)15,12]}

;MACROS TO SAVE AND RESTORE AC'S  -  SAVAC, GETAC.
	DEFINE SAVAC $(N){LAC[XWD 2,[AC2: FOR I←2,N{0↔}]]↔BLT AC2+N-2}
	DEFINE GETAC (N){LAC[XWD AC2,2]↔BLT N}
;LINK NAMES DEFINED.

	DEFINE LEFT $(NAM,WRD,Z){
	IFIDN<><Z><DEFINE NAM(A,Q)<CAR A,WRD(Q)>>
	IFDIF<><Z><DEFINE NAM(A,Q)<HLRE A,WRD(Q)>>
	DEFINE NAM$.(A,Q)<DIP A,WRD(Q)>
}
	DEFINE RIGHT $(NAM,WRD,Z){
	IFIDN<><Z><DEFINE NAM(A,Q)<CDR A,WRD(Q)>>
	IFDIF<><Z><DEFINE NAM(A,Q)<HRRE A,WRD(Q)>>
	DEFINE NAM$.(A,Q)<DAP A,WRD(Q)>
}

	LEFT(CW,0)		RIGHT(CCW,0)
	LEFT(ROW,3)↔		RIGHT(COL,3)
	LEFT(DAD,1)↔		RIGHT(SON,1)
	LEFT(TYPE,2)↔		RIGHT(RELOC,2)
	LEFT(ENDO,3)↔		RIGHT(EXO,3)
	LEFT(ALT,4) LEFT(ARC,4)	RIGHT(NCNT,4,N)
	LEFT(NGON,5)↔		RIGHT(PGON,5)
	LEFT(NTIME,6)↔		RIGHT(PTIME,6)

	DEFINE CNTRST(A,Q){HLRE A,4(Q)}
	DEFINE CNTRS.(A,Q){DIP A,4(Q)}
;-----------------------------------------------------------------
;PROPERTY-TYPE MACROS.

	DEFINE MARK (Q,BITS){MOVSI(BITS)↔IORM(Q)2}
	DEFINE MARKZ(Q,BITS){MOVSI(BITS)↔ANDCAM(Q)2}
	DEFINE TEST (Q,BITS){LAC(Q)2↔TLNN(BITS)}
	DEFINE TESTZ(Q,BITS){LAC(Q)2↔TLNE(BITS)}

;PROPERTY-TYPE BITS.

	↓WESBIT←←1B0		;WEST.		VIC ONLY.
	↓SOUBIT←←1B1		;SOUTH.
	↓EASBIT←←1B2		;EAST.
	↓NORBIT←←1B3		;NORTH.

	↓NFUSE←←1B4		;NTIME FUSION.	POLYGONS ONLY.
	↓NFISS←←1B5		;NTIME FISSION.
	↓NEXCT←←1B6		;NTIME EXACT.
	↓PFUSE←←1B7		;PTIME FUSION.
	↓PFISS←←1B8		;PTIME FISSION.
	↓PEXCT←←1B9		;PTIME EXACT.

	↓HOLBIT←←1B10		;HOLE POLYGON.
	↓ARCBIT←←1B11		;ARC VECTOR.

	↓SBIT←←1B12		;SHAPE NODE.
	↓VBIT←←1B13		;VERTEX NODE.
	↓PBIT←←1B14		;POLYGON NODE.
	
	↓LBIT←←1B15		;LEVEL NODE.
	↓IBIT←←1B16		;IMAGE NODE.
	↓FBIT←←1B17		;FILM NODE.

;LINK-RELOCATION BITS OF EACH NODE TYPE.

	  VREL←←604604	;VERTEX & ARC.
	PGNREL←←674654	;POLYGON.
	LVLREL←←620600	;LEVEL.
	IMGREL←←624604	;IMAGE.
	FILREL←←400600	;FILM.
	SHPREL←←410410	;SHAPE.
;-----------------------------------------------------------------
	↓% ←← 400000
	↓NODSIZ ←← 8
	↓RC←←3